package cn.xiaobai.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Map;

/**
 * JWT 工具
 *
 * @Author yangdaji
 * @Date 2024/2/24
 * @PackageName cn.xiaobai.utils
 * @ClassName JWTUtils
 */
public class JWTUtils {

    // 这里可以使用生成的秘钥
    private static final String SECRET = "XIAOYANG@email.com";


    /**
     * 生成 token
     *
     * @param map payload 数据
     * @return
     */
    public static String createToken(Map<String, String> map) {
        // 设置有效期, 24 小时
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.HOUR_OF_DAY, 24);

        // 创建 jwt 构造器
        JWTCreator.Builder builder = JWT.create();

        // 设置 payload
        map.forEach(builder::withClaim);

        // 设置过期时间, 生成 token
        return builder.withExpiresAt(instance.getTime()).sign(Algorithm.HMAC256(SECRET));
    }

    /**
     * 验证并返回token信息
     *
     * @param token 待校验的token
     * @return
     */
    public static DecodedJWT verifyToken(String token) {
        return JWT.require(Algorithm.HMAC256(SECRET))
                .build().verify(token);
    }
}
